//封装一格函数，求任意数的最小值，并且把最小值当成函数的返回值
function min() {
  var min = arguments[0];
  for (var i = 0; i < arguments.length; i++) {
    if (arguments[i] < min) {
      min = arguments[i];
    }
  }
  return min;
}

// 格式化时间对象的函数
function formatDate(d) {
  var year = d.getFullYear();
  var month = d.getMonth() + 1;
  month = month < 10 ? "0" + month : month;

  var date = d.getDate();
  date = date < 10 ? "0" + date : date;

  var hour = d.getHours();
  hour = hour < 10 ? "0" + hour : hour;

  var min = d.getMinutes();
  min = min < 10 ? "0" + min : min;

  var sec = d.getSeconds();
  sec = sec < 10 ? "0" + sec : sec;

  var day = d.getDay();

  var arr = [
    "星期天",
    "星期一",
    "星期二",
    "星期三",
    "星期四",
    "星期五",
    "星期六",
  ];
  return {
    year: year,
    month: month,
    date: date,
    hour: hour,
    min: min,
    sec: sec,
    week: day,
  };
}

// 封装函数（求两个时间对象的差数）
/* 
    参数：两个时间对象
    返回值：以对象形式把相差的天数 小时 分钟和秒数返回 
*/
function timeDifference(date1, date2) {
  var time1 = date1.getTime();
  var time2 = date2.getTime();

  var t = Math.abs(time1 - time2);
  var day = parseInt(t / 1000 / 60 / 60 / 24);
  var h = parseInt(t / 1000 / 60 / 60) % 24;
  var m = parseInt(t / 1000 / 60) % 60;

  var s = parseInt(t / 1000) % 60;
  // console.log(`两个时间相差${day}天${h}小时${m}分钟${s}秒`);
  return {
    d: day,
    h: h,
    m: m,
    s: s,
  };
}

// 封装一个获取样式的函数
/* 
    参数：
        ele:获取样式的元素
        attr:获取什么样式
    返回值：
        获取的样式
*/
function getStyle(ele, attr) {
  var style;
  if (window.getComputedStyle) {
    style = window.getComputedStyle(ele)[attr];
  } else {
    style = ele.currentStyle[attr];
  }

  return style;
}

// 封装一个给元素设置样式的函数
/* 
    参数：
        ele:给哪个元素设置样式
        attr:设置样式的属性
        value:设置样式的属性的属性值
*/

// 封装一个事件监听的函数
/* 
    参数：
        ele：事件源
        type：事件类型
        cb：事件处理函数
    返回值：
        不需要返回值
*/
function addEvent(ele, type, cb) {
  if (ele.addEventListener) {
    ele.addEventListener(type, cb);
  } else {
    ele.attachEvent("on" + type, cb);
  }
}

// 封装一个设置样式的函数
function setStyle(ele, option) {
  //遍历对象
  for (var key in option) {
    ele.style[key] = option[key];
  }
}

// 封装的动画函数
/* 
    参数：
        ele：dom          参与动画的元素（必须）
        option:object     参与动画的属性 和目标是 （必须）
        callback:function 动画执行完成之后需要执行代码（选填）
*/
function move(ele, option, callback) {
  let len = 0; // 用于记录动画的个数（参与动画的属性个数）
  for (let key in option) {
    len++;
    clearInterval(ele[key]);
    ele[key] = setInterval(() => {
      let style = parseInt(getStyle(ele, key));

      let speed = (option[key] - style) / 10;
      speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
      style += speed;

      ele.style[key] = style + "px";
      if (style == option[key]) {
        clearInterval(ele[key]);
        len--;
        if (len != 0) return;
        callback && callback();
      }
    }, 30);
  }
}

// 随机数
function randomNum(n, m) {
  return parseInt(Math.random() * (m - n + 1) + n);
}

function randomColor() {
  return `rgb(${randomNum(0, 255)},${randomNum(0, 255)},${randomNum(0, 255)})`;
}
